<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <!-- 
        1.js数据类型有哪些?(6分)       
            数字number  字符串string  布尔值boolean   空null  未定义undefined 
            数组array   对象object                                                  
        2.数组的常用方法并解释用处(最少5个)(6分)
            (增删改查) [1,2,3,4]
            push 在最后添加
            pop 在最后删除
            shift 在前面删除
            unshift 在前面添加
            splice 在中间删除并添加
            foreach 循环
            indexof 查询元素第一次出现的位置
            lastindexof 查询元素最后第一次出现的位置
            sort 排序
            reverse 反转
            join 转换成字符串
            tostring 转换成字符串
        3.字符串的常用方法并解释用处(最少5个)(6分)    
            indexof 查询元素第一次出现的位置
            lastindexof 查询元素最后第一次出现的位置     
            charat 获取指定位置的字符                           
        4.生成一个时间对象,并获取这个中的月份(2017年6月25日)(6分)
            var date = new Date("2017-6-25");
            var m = date.getMonth() + 1;
        5.获取十个10-50之间的随机数(6分)   
            for(var i = 0;i < 10;i++){
                var n = Math.random() * 41;
                var m = Math.floor(n); // 0-40
                var k = m + 10; //10-50
            }                                                    
        6.事件的添加方法有哪些?(6分)
            在开始标签内(即html内)直接通过html的事件属性添加事件
            <div onclick="fun()"></div>  //fun是全局函数

            在js中获取标签对象 给标签对象添加事件
            标签对象.onclick = function(){}

            通过事件监听添加事件
            标签对象.addEventListener("事件",函数)

        7.解释事件的传播机制,如何阻止事件的传播(6分)    
            在事件被触发的时候,会先由外向内从html开始一层一层找到当前被点击的标签,
            再从当前点击的标签由内向外一层一层的找到html;
            这个由外向内的过程叫捕获阶段
            再由内向外的过程叫冒泡阶段 默认事件是在冒泡阶段执行的

            事件对象event.stopPropagation();

        8.this的指向(分别在什么情况下指向谁)(6分)
            全局函数中this指向window
            事件函数中this指触发事件的标签对象
            构造函数中this指当前创建的实例对象

        9.dom获取标签(6分)

            
        10.写出下面代码的运行结果(6分)
        function Fun(){
            console.log(this); // 1.{}
            this.name = "lili";
            var age = 18;
            this.test = function(){
                console.log(this.age); //3.undefined

                console.log(age); //4.undefined
                var age = 20;
            }
        }
        var f = new Fun();
        console.log(f); //2.{name:"lili",test:function}
        console.log(f.test());//输出函数的返回值  5.undefined

        11.写出 
        console.log(10 > 5 && 12 == "12"); //true
        console.log(12 + "12" || 10 > 100);  //"1212"
        console.log(undefined || null);  //null
        console.log(100 - 120 || 10 - 10); //-20
        console.log(10 - 10 && 100 - 120);  //0
        的输出结果;(5分)

        12. 写出下面代码的运行结果(5分)
        var m = 10;
        for(var i = 0,j = 10;i < 10,j > 5;i++,j--){
            m+=i+j
        }
        console.log(m); //60




        13.用函数封装一个数组的unshift方法(10分) 
        14.用函数封装一个字符串的substr方法(10分) 
        15.用函数封装一个数组的join方法(10分)
     -->
</body>
<script>
    var arr = new Array();
    console.log(arr); //Array:[]

    var obj = new Object();
    console.log(obj); //Object:{}

    function Fun(){
        console.log(this); //Fun{}
        this.bingqilin1 = "red";
    }
    var f = new Fun(); 
    console.log(f); //Fun:{bingqilin1:"red"}    

    console.log("-------------");
    var k = new Fun();
    console.log(k);

</script>

</html>